package telas.componentes;

import java.lang.reflect.Method;
import java.util.List;

import javax.swing.JCheckBox;

import business.seguranca.ControleAcesso;
import business.seguranca.TipoUsuario;
import business.seguranca.Usuario;
import business.sistema.IObjetoSistema;
import business.sistema.Observer;

public class CheckBox extends JCheckBox implements Observer
{
	private static final long serialVersionUID = 9160706988015457576L;
	private String atributoObservado;  //  @jve:decl-index=0:
	private int controleAcesso = 1;
	private List<TipoUsuario> tiposUsuarioAceito;

	public CheckBox() 
	{
		super();
	}
	
	public void update(IObjetoSistema objeto, String mensagem) throws Exception 
	{
		Class<?> clsObjeto = objeto.getClass();
		Method objMetodo = clsObjeto.getMethod("is" + getAtributoObservado());
		
		Boolean selecionado = (Boolean)(objMetodo.invoke(objeto)); 
		
		setSelected(selecionado.booleanValue());
	}
	
	public String getAtributoObservado() 
	{
		return atributoObservado;
	}

	public void setAtributoObservado(String atributoObservado) 
	{
		this.atributoObservado = atributoObservado;
	}
	
	public int isControleAcesso() 
	{
		return controleAcesso;
	}

	public void setControleAcesso(int controleAcesso) 
	{
		this.controleAcesso = controleAcesso;
		
		if( Usuario.getUsuarioSessao().getTipoUsuario().getCodigo() >= controleAcesso )
		{
			setEnabled(true);
		}
		else
		{
			setEnabled(false);
		}
	}
	
	public void setTiposUsuarioAceito(List<TipoUsuario> tiposUsuarioAceito)
	{
		this.tiposUsuarioAceito = tiposUsuarioAceito;
		
		setEnabled(ControleAcesso.verificaAcesso(this.tiposUsuarioAceito));
	}

}
